package com.hiv.client.model.weixin;

import com.hiv.client.model.base.RefundAmount;
import com.hiv.client.model.base.RefundAmountGoodsDetail;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 申请退款req
 * https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_9.shtml
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WeixinJsRefundOrderReq implements Serializable {
    /**
     * 微信支付订单号
     *
     * @desc 原支付交易对应的微信订单号
     * 示例值：1217752501201407033233368018
     * @required 是否必填：二选一
     */
    private String transaction_id;
    /**
     * 商户订单号
     *
     * @desc 原支付交易对应的商户订单号
     * 示例值：1217752501201407033233368018
     * @required 是否必填：二选一
     */
    private String out_trade_no;
    /**
     * 商户退款单号
     *
     * @desc 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     * 示例值：1217752501201407033233368018
     * @required 是否必填：是
     */
    private String out_refund_no;
    /**
     * 退款原因
     *
     * @desc 若商户传入，会在下发给用户的退款消息中体现退款原因
     * 示例值：商品已售完
     * @required 是否必填：否
     */
    private String reason;
    /**
     * 退款结果回调url
     *
     * @desc 异步接收微信支付退款结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 如果参数中传了notify_url，则商户平台上配置的回调地址将不会生效，优先回调当前传的这个地址。
     * 示例值：https://weixin.qq.com
     * @required 是否必填：否
     */
    private String notify_url;
    /**
     * 退款资金来源
     *
     * @desc 若传递此参数则使用对应的资金账户退款，否则默认使用未结算资金退款（仅对老资金流商户适用）
     * 枚举值：
     * AVAILABLE：可用余额账户
     * 示例值：AVAILABLE
     * @required 是否必填：否
     */
    private String funds_account = "AVAILABLE";
    /**
     * 金额信息
     *
     * @desc 订单金额信息
     * @required 是否必填：是
     */
    private RefundAmount amount;
    /**
     * 退款商品
     *
     * @desc 指定商品退款需要传此参数，其他场景无需传递
     * @required 是否必填：否
     */
    private List<RefundAmountGoodsDetail> goods_detail;

}
